package com.jdy.singleton.lazy;

/**
 * 懒汉式简单单例
 * <p>
 * 在调用时实例化单例，
 * <p>
 * 缺点：容易出现线程安全的问题
 */
public class LazySimpleSingleton {

    /**
     * 类加载时不初始化实例
     */
    private static LazySimpleSingleton INSTANCE;

    /**
     * 私有化构造方法
     */
    private LazySimpleSingleton() {
    }

    /**
     * 等到调用时初始化单例实例
     * <p>
     * 提供全局访问点
     * <p>
     * 如果没有synchronized关键字，容易出现线程安全问题，因此需要添加synchronized进行同步，
     * 在方法添加synchronized关键字，可能造成整个类都会因为方法上的synchronized关键字被锁，因此一般都会在方法内部添加synchronized关键字
     *
     * @return 单例对象
     */
    public static synchronized LazySimpleSingleton getInstance() {
        //这里需要办法保证只有一个实例
        if (INSTANCE == null)
            INSTANCE = new LazySimpleSingleton();
        return INSTANCE;
    }
}
